package com.zp.self.module.level_4_算法练习.数据结构.String;

/**
 * @author By ZengPeng
 */
public class 力扣_392_判断子序列 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_392_判断子序列().isSubsequence("abc","ahbgdc"));
        System.out.println(new 力扣_392_判断子序列().isSubsequence("axc","ahbgdc"));
        System.out.println(new 力扣_392_判断子序列().isSubsequence("",""));
    }

    /**
     * 题目：给定字符串 s 和 t ，判断 s 是否为 t 的子序列。
     * 字符串的一个子序列是原始字符串删除一些（也可以不删除）字符而不改变剩余字符相对位置形成的新字符串。
     * （例如，"ace"是"abcde"的一个子序列，而"aec"不是）。
     * 进阶：
     * 如果有大量输入的 S，称作 S1, S2, ... , Sk 其中 k >= 10亿，你需要依次检查它们是否为 T 的子序列。在这种情况下，你会怎样改变代码？
     *
     * 示例 1：
     * 输入：s = "abc", t = "ahbgdc"
     * 输出：true
     *
     * 示例 2：
     * 输入：s = "axc", t = "ahbgdc"
     * 输出：false
     *
     * 分析：
     *      1.双指针:用字符串1中的字符，依次在字符串2中查找；最后都找到了则true
     *
     * 边界值 & 注意点：
     *      1."abc x","ab bcx"
     **/
    public boolean isSubsequence(String s, String t) {
        char[] cs = s.toCharArray();
        char[] ct = t.toCharArray();
        int left=0,right = 0;
        while (left<cs.length && right<ct.length){
            if(cs[left]==ct[right])left++;
            right++;
        }
        return  left==cs.length;
    }
}
